package dao

import (
	"yundian/internel/app/helper/request"
	"yundian/internel/app/helper/resphelper/placeresp"
	"yundian/internel/pkg/dingo"
	"yundian/internel/pkg/dingo/global"
)

// GetPlaceUserList 获取商户
//func (d *UserDao) GetPlaceUserList(param *request.UserList) *dingo.ErrorWrap {
//
//	var (
//		lst    []placeresp.PlaceInfoWithUser
//		count  int64
//		limit  int = param.PageSize
//		offset int = param.PageSize * (param.PageNo - 1)
//	)
//
//	// 奖励笔数-抽单笔数
//	drawOrderCountSql := global.Orm.Debug().Table("orders").Select("count(1) as count,place_id").Where("is_draw = 1").Group("place_id")
//	// 提现笔数，提现金额
//	cashSql := global.Orm.Debug().Table("cash_log").Select("SUM(transfer_money) as money,user_id,count(1) as cashCount").Group("user_id")
//	// 分红金额
//	dividendSql := global.Orm.Debug().Table("dividends_log").Select("SUM(money) as money,user_id").Group("user_id")
//
//	db := global.Orm.Debug().
//		Table("places p").
//		Select("p.*,u.name,u.user_no,u.phone,u.phone_code,u.profit_type,"+
//			"u.profit_proportion,u.cdb_profit_proportion,u.parent_id,c.count as draw_count,"+
//			"l.money as cash_money,l.cashCount as cash_count,"+
//			"(d.money-l.money) as divid_money").
//		Joins("left join users u on p.user_id = u.id").
//		Joins("left join (?) as c on p.id = c.place_id", drawOrderCountSql).
//		Joins("left join (?) as l on u.id = l.user_id", cashSql).
//		Joins("left join (?) as d on u.id = d.user_id", dividendSql).
//		Where("u.is_delete = ?", 0).
//		Where("u.is_place in (1,2)")
//		//Where("u.is_admin = ?", param.IsAdmin).
//		//Where("u.is_place = ?", param.IsPlace)
//
//	if param.SearchText != "" {
//		db.Where("p.place_name like ?", fmt.Sprint("%", param.SearchText, "%"))
//		//db.Where("concat(user_name,real_name) like ?", fmt.Sprint("%", param.SearchText, "%"))
//	}
//	if param.PlaceName != "" {
//		db.Where("p.place_name like ?", fmt.Sprint("%", param.PlaceName, "%"))
//		//db.Where("concat(user_name,real_name) like ?", fmt.Sprint("%", param.SearchText, "%"))
//	}
//
//	if param.UserNo != "" {
//		db.Where("u.user_no = ?", param.UserNo)
//	}
//
//	if param.Name != "" {
//		db.Where("p.user_name like ?", fmt.Sprint("%", param.Name, "%"))
//	}
//
//	if param.Phone != "" {
//		db.Where("u.phone = ?", param.Phone)
//	}
//	if param.Status > 0 {
//		db.Where("p.status = ?", param.Status)
//	}
//
//	// 时间查询
//	if param.BeginTime != "" {
//		beginTime := strings.Split(param.BeginTime, ",")
//		db.Where("p.last_login_time >= ? and p.last_login_time <= ?", beginTime[0], beginTime[1])
//	}
//
//	// 过滤
//	if len(param.Level) > 0 {
//		db.Where("p.level in ?", param.Level)
//	}
//	// 如果是文员登录，只展示自己维护的商户
//	if param.IsAdmin == 4 {
//		db.Where("p.maintainer_id = ? ", param.MaintainerId)
//	}
//	// 如果是代理商登录，只展示旗下所有商户
//	if param.IsAdmin == 3 {
//
//		// 获取该用户下的所有代理商的用户ID
//		pidArr := []int{param.UserId}
//		userIdArr := make([]int, 0)
//		isRecursive := true
//		// 递归 无限查询下级
//		for isRecursive {
//			tempUserIdArr := NewUserDao().GetUserIdByPid(pidArr).Unwrap().([]int)
//
//			if len(tempUserIdArr) == 0 {
//				isRecursive = false
//			} else {
//				userIdArr = append(userIdArr, tempUserIdArr...)
//				pidArr = tempUserIdArr
//				//log.Println("当前pid数组：",pidArr)
//				//log.Println("当前userIdArr数组：",userIdArr)
//			}
//		}
//
//		// 获取该代理商下的所有网点ID
//		db.Where("u.id in (?)", userIdArr)
//		//db.Where("u.parent_id = ? ", param.UserId)
//	}
//
//	// 排序
//	if param.SortField != "" && param.SortOrder == "ascend" {
//		db.Order(fmt.Sprintf("%s asc", utils.String(param.SortField).SnakeCase()))
//	}
//	if param.SortField != "" && param.SortOrder == "descend" {
//		db.Order(fmt.Sprintf("%s desc", utils.String(param.SortField).SnakeCase()))
//	}
//	if param.SortField == "" {
//		db.Order("p.last_login_time desc, p.used_rate desc")
//	}
//	// 如果有分页
//	if limit > 0 && offset > 0 {
//		db.Limit(limit).Offset(offset)
//	}
//	db.Find(&lst).Limit(-1).Offset(-1).Count(&count)
//
//	return dingo.ErrorIf(db.Error, lst, count)
//
//}

func (d *UserDao) GetPlaceEntryList(param *request.BaseListReq, agentUserId int) *dingo.ErrorWrap {

	var (
		lst    []placeresp.PlaceInfoWithEntry
		count  int64
		limit  int = param.PageSize
		offset int = param.PageSize * (param.PageNo - 1)
	)

	db := global.Orm.Debug().
		Table("places p").
		Select("p.id,p.place_name,p.entry_at,p.entry_money,p.entry_status,p.status,u.name,u.user_no,u.phone").
		Joins("left join users u on p.user_id = u.id").
		Where("p.entry_status = 2"). // 已达标
		Where("p.status = 4"). // 进场模式预警
		Where("p.agent_user_id = ?", agentUserId) // 对应代理商下的

	db.Limit(limit).Offset(offset).Find(&lst).Limit(-1).Offset(-1).Count(&count)

	return dingo.ErrorIf(db.Error, lst, count)

}

// HandleUpdatePlaceMeiTuan 更新商户美团信息
func (d *UserDao) UpdatePlaceMeiuan(id int, url, banners string) *dingo.ErrorWrap {
	db := global.Orm.Exec("update places set url = ?,banners = ? where id = ?", url, banners, id)
	return dingo.ErrorIf(db.Error, true)
}

// 修改网点分成比例
func (d *UserDao) UpdatePlaceProfit(userId, pcl, cdb int) *dingo.ErrorWrap {
	db := global.Orm.Debug().Exec("update users set profit_proportion = ?,sm_profit_proportion = ? where id = ?", pcl, cdb, userId)
	return dingo.ErrorIf(db.Error, true)
}

func (d *UserDao) UpdatePlaceDrawStr(placeId int, drawStr string) *dingo.ErrorWrap {
	db := global.Orm.Debug().Exec("update places set draw_str = ? where id = ?", drawStr, placeId)
	return dingo.ErrorIf(db.Error, true)
}
